package com.matrix.app.mvc.project.member.controller;

import com.matrix.app.mvc.project.member.data.MemberDto;
import com.matrix.app.mvc.project.member.data.MemberPo;
import com.matrix.app.mvc.project.member.service.MemberService;
import com.matrix.framework.core.annotation.validation.LogCollector;
import com.matrix.framework.core.annotation.validation.Valid;
import com.matrix.framework.core.common.result.Result;
import com.matrix.framework.core.i18n.I18n;
import com.matrix.framework.core.i18n.MessageConstants;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.server.ServerWebExchange;

/**
 * 项目成员控制器
 *
 * Copyright © 海平面工作室 版权所有
 *
 * @Author: Leo
 * @Create: 2025/06/01
 * @Since 1.0
 */
@RestController
@RequestMapping("/project/member")
public class MemberController {

    private final MemberService MemberService;

    /**
     * 构造函数注入成员服务
     * @param projectMemberService 成员服务
     */
    public MemberController(MemberService projectMemberService) {
        this.MemberService = projectMemberService;
    }

    /**
     * 新增项目成员
     * @param member 成员信息
     * @param exchange 请求上下文
     * @return 新增后的成员信息
     */
    @LogCollector
    @PostMapping("/save")
    public Result<MemberPo> save(@Valid @RequestBody MemberPo member, ServerWebExchange exchange) {
        MemberPo saved = MemberService.save(member);
        return Result.ok(saved).message(I18n.getMessage(MessageConstants.SAVE_SUCCESS));
    }

    /**
     * 删除项目成员
     * @param id 成员ID
     * @param exchange 请求上下文
     * @return 被删除的成员信息
     */
    @LogCollector
    @DeleteMapping("/delete")
    public Result<MemberPo> delete(@RequestParam("id") Long id, ServerWebExchange exchange) {
        MemberPo member = MemberService.findById(id);
        MemberService.deleteById(id);
        return Result.ok(member).message(I18n.getMessage(MessageConstants.DELETE_SUCCESS));
    }

    /**
     * 获取单个项目成员信息
     * @param id 成员ID
     * @return 成员信息
     */
    @GetMapping("/get")
    public Result<MemberPo> get(@RequestParam("id") Long id) {
        MemberPo member = MemberService.findById(id);
        return Result.ok(member).message(I18n.getMessage(MessageConstants.QUERY_SUCCESS));
    }

    /**
     * 分页获取项目成员列表（含性别和角色描述）
     * @param dto 查询条件及分页参数
     * @return 分页成员VO对象
     */
    @PostMapping("/list")
    public Result<MemberDto> list(@RequestBody MemberDto dto) {
        MemberDto vo = MemberService.findMembers(dto);
        return Result.ok(vo).message(I18n.getMessage(MessageConstants.QUERY_SUCCESS));
    }
} 